From: Colin Walters Date: Mon, 13 Apr 2015 17:28:02 +0000 (-0400) Subject: repo: Add a private helper to replace a file, honoring fsync policy X-Git-Tag: archive/raspbian/2022.1-3+rpi1~1^2~803 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=fff8ffdd2f20f5e16113939ac556719ebdfb24a2;p=ostree.git repo: Add a private helper to replace a file, honoring fsync policy Extracted from discussion in https://github.com/GNOME/ostree/pull/83 --- diff --git a/src/libostree/ostree-repo-private.h b/src/libostree/ostree-repo-private.h index 8b07254c..ceed4711 100644 --- a/src/libostree/ostree-repo-private.h +++ b/src/libostree/ostree-repo-private.h @@ -126,6 +126,15 @@ _ostree_repo_update_refs (OstreeRepo *self, GCancellable *cancellable, GError **error); +gboolean +_ostree_repo_file_replace_contents (OstreeRepo *self, + int dfd, + const char *path, + guint8 *buf, + gsize len, + GCancellable *cancellable, + GError **error); + gboolean _ostree_repo_write_ref (OstreeRepo *self, const char *remote, diff --git a/src/libostree/ostree-repo-refs.c b/src/libostree/ostree-repo-refs.c index a436e042..ee6db8ac 100644 --- a/src/libostree/ostree-repo-refs.c +++ b/src/libostree/ostree-repo-refs.c @@ -106,9 +106,8 @@ write_checksum_file_at (OstreeRepo *self, bufnl[l] = '\n'; bufnl[l+1] = '\0'; - if (!glnx_file_replace_contents_at (dfd, name, (guint8*)bufnl, l + 1, - self->disable_fsync ? GLNX_FILE_REPLACE_NODATASYNC : GLNX_FILE_REPLACE_DATASYNC_NEW, - cancellable, error)) + if (!_ostree_repo_file_replace_contents (self, dfd, name, (guint8*)bufnl, l + 1, + cancellable, error)) goto out; } diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c index 072ae765..b27fcce8 100644 --- a/src/libostree/ostree-repo.c +++ b/src/libostree/ostree-repo.c @@ -1502,6 +1502,23 @@ ostree_repo_set_disable_fsync (OstreeRepo *self, } +/* Replace the contents of a file, honoring the repository's fsync + * policy. + */ +gboolean +_ostree_repo_file_replace_contents (OstreeRepo *self, + int dfd, + const char *path, + guint8 *buf, + gsize len, + GCancellable *cancellable, + GError **error) +{ + return glnx_file_replace_contents_at (dfd, path, buf, len, + self->disable_fsync ? GLNX_FILE_REPLACE_NODATASYNC : GLNX_FILE_REPLACE_DATASYNC_NEW, + cancellable, error); +} + /** * ostree_repo_get_path: * @self: